package com.pn.service.impl;

import com.pn.entity.Result;
import com.pn.mapper.ProductMapper;
import com.pn.model.Product;
import com.pn.page.Page;
import com.pn.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class ProductServiceImpl implements ProductService {

    @Autowired
    private ProductMapper productMapper;

    @Value("${file.access-path}")
    private String fileAccessPath;
    /**
     * 分页查询商品信息
     * @param page
     * @param product
     * @return
     */
    @Override
    public Page queryProductPage(Page page, Product product) {

        //查询商品行数
        Integer count = productMapper.findProductRowCount(product);
        //分页查询商品
        List<Product> productList = productMapper.findProductPage(page,product);
        //组装分页信息
        page.setTotalNum(count);
        page.setResultList(productList);
        return page;
    }

    /**
     * 添加商品
     * @param product
     * @return
     */
    @Override
    public Result saveProduct(Product product) {

        //判断商品型号是否已经存在
        Product prct = productMapper.findProductByNum(product.getProductNum());
        if(prct!=null){//商品型号已存在
            return Result.err(Result.CODE_ERR_BUSINESS,"商品型号已存在！");
        }
        //处理上传的图片的访问路径
        product.setImgs(fileAccessPath+product.getImgs());
        //添加商品
        int i = productMapper.insertProduct(product);
        if(i>0){
            return Result.ok("商品添加成功!");
        }
        return Result.err(Result.CODE_ERR_BUSINESS,"商品添加失败！");
    }

    /**
     * 修改商品上下架状态
     * @param product
     * @return
     */
    @Override
    public Result updateStateByPid(Product product) {
        int i = productMapper.updateStateByPid(product.getProductId(),product.getUpDownState());
        if(i>0){
            return Result.ok("商品的上下架状态修改成功");
        }
        return Result.err(Result.CODE_ERR_BUSINESS,"商品的上下架状态修改失败");
    }

    /**
     * 删除多个商品
     * @param productIdList
     * @return
     */
    @Override
    public Result deleteProductByIds(List<Integer> productIdList) {
        int i = productMapper.removeProductByIds(productIdList);
        if(i>0){
            return Result.ok("商品删除成功！");
        }
        return Result.err(Result.CODE_ERR_BUSINESS,"商品删除失败！");
    }

    /**
     *  修改商品
     * @param product
     * @return
     */
    @Override
    public Result setProductById(Product product) {

        //判断修改后的型号是否已经存在（型号是唯一的）
        Product prod = productMapper.findProductByNum(product.getProductNum());
        if(prod!=null && !prod.getProductId().equals(product.getProductId())){//商品型号改了，但是商品型号已经存在
            return Result.err(Result.CODE_ERR_BUSINESS,"修改后的型号已存在");
        }

        //判断上传图片是否被修改，如果修改了处理访问路径
        if(!product.getImgs().contains(fileAccessPath)){
            product.setImgs(fileAccessPath + product.getImgs());
        }

        //修改商品
        int i = productMapper.setProductById(product);
        if(i>0){
            return Result.ok("商品修改成功！");
        }
        return Result.err(Result.CODE_ERR_BUSINESS,"商品修改失败！");
    }
}
